package com.example.tests;

import static org.hamcrest.Matchers.*;
import static org.junit.Assert.assertThat;
import java.util.Random;
import org.testng.annotations.Test;
import com.example.utils.SortedListOf;

public class ContactModificationTests extends TestBase{
	
	@Test(dataProvider = "randomValidContactGenerator")
	public void modifySomeContact(ContactData contact){
		// save old state
		SortedListOf<ContactData> oldContactList =
				new SortedListOf<ContactData>(app.getHibernateHelper().listContacts());
		 
		
	    Random rnd = new Random();
	    int index = rnd.nextInt(oldContactList.size()-1);
	    	    
	    ContactData contactfromDB = oldContactList.get(index);
	    ContactData contactfromUI = app.getContactHelper().getContactDataFromUI(index);
	    System.out.println("from DB " + contactfromDB);
	    System.out.println("From UI " + contactfromUI);
	    assertThat(contactfromDB, equalTo(contactfromUI));
	    if ( contactfromDB.equals(contactfromUI))
	    {
		   System.out.println("Nice");
	    }
	    
		app.getContactHelper().modifyContact(index, contact);
			
		//save new state 
		SortedListOf<ContactData> newContactList = app.getContactHelper().getContacts();
	    //compare states 
		assertThat(newContactList, equalTo(oldContactList.without(index).withAdded(contact)));
	}


}
